﻿using System;
using System.Collections.Generic;
using System.Text;

namespace LostLib.Win32
{
	[Serializable]
	[Flags]
	public enum WindowStyle: uint
	{
		Null = 0x00000000u,
		/// <summary>
		/// An overlapped window has a title bar and a border.
		/// </summary>
		Overlapped = 0x00000000u,
		/// <summary>
		/// Creates a pop-up window. This style cannot be used with the Child style.
		/// </summary>
		Popup = 0x80000000u,
		/// <summary>
		/// Creates a child window. A window with this style cannot have a menu bar. This style cannot be used with the Popup style.
		/// </summary>
		Child = 0x40000000u,
		/// <summary>
		/// Creates a window that is initially minimized.
		/// </summary>
		Minimize = 0x20000000u,
		/// <summary>
		/// Creates a window that is initially visible.
		/// </summary>
		/// <seealso cref="LostLib.Win32.WindowsAPI.ShowWindow"/>
		/// <seealso cref="LostLib.Win32.WindowsAPI.SetWindowPos"/>
		Visible = 0x10000000u,
		/// <summary>
		/// Creates a window that is initially disabled. A disabled window cannot receive input from the user.
		/// </summary>
		/// <seealso cref="LostLib.Win32.WindowsAPI.EnableWindow"/>
		Disabled = 0x08000000u,
		/// <summary>
		/// Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the ClipSiblings style clips all other overlapping child windows out of the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.
		/// </summary>
		ClipSiblings = 0x04000000u,
		/// <summary>
		/// Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.
		/// </summary>
		ClipChildren = 0x02000000u,
		/// <summary>
		/// Creates a window that is initially maximized.
		/// </summary>
		Maximize = 0x01000000u,
		/// <summary>
		/// Creates a window that has a title bar (includes the Border style).
		/// </summary>
		Caption = 0x00C00000u,     /* WS_BORDER | WS_DLGFRAME  */
		/// <summary>
		/// Creates a window that has a thin-line border.
		/// </summary>
		Border = 0x00800000u,
		/// <summary>
		/// Creates a window that has a border of a style typically used with dialog boxes. A window with this style cannot have a title bar.
		/// </summary>
		Dialog = 0x00400000u,
		/// <summary>
		/// Creates a window that has a vertical scroll bar.
		/// </summary>
		VerticalScroll = 0x00200000u,
		/// <summary>
		/// Creates a window that has a horizontal scroll bar.
		/// </summary>
		HorizontalScroll = 0x00100000u,
		/// <summary>
		/// Creates a window that has a window menu on its title bar. The Caption style must also be specified.
		/// </summary>
		SystemMenu = 0x00080000u,
		/// <summary>
		/// Creates a window that has a sizing border.
		/// </summary>
		ThickFrame = 0x00040000u,
		/// <summary>
		/// Specifies the first control of a group of controls. The group consists of this first control and all controls defined after it, up to the next control with the Group style. The first control in each group usually has the TabStop style so that the user can move from group to group. The user can subsequently change the keyboard focus from one control in the group to the next control in the group by using the direction keys.
		/// </summary>
		Group = 0x00020000u,
		/// <summary>
		/// Specifies a control that can receive the keyboard focus when the user presses the TAB key. Pressing the TAB key changes the keyboard focus to the next control with the TabStop style. 
		/// </summary>
		TabStop = 0x00010000u,
		/// <summary>
		/// Creates a window that has a minimize button. Cannot be combined with the WindowStyleEx.ContextHelp style. The SystemMenu style must also be specified.
		/// </summary>
		MinimizeBox = 0x00020000u,
		/// <summary>
		/// Creates a window that has a maximize button. Cannot be combined with the WindowStyleEx.ContextHelp style. The SystemMenu style must also be specified.
		/// </summary>
		MaximizeBox = 0x00010000u,

		/// <summary>
		/// An overlapped window has a title bar and a border.
		/// </summary>
		Tiled = Overlapped,

		/// <summary>
		/// Creates a window that is initially minimized.
		/// </summary>
		Iconic = Minimize,
		/// <summary>
		/// Creates a window that has a sizing border.
		/// </summary>
		SizeBox = ThickFrame,
	}
}
